#pragma once

//
//Include a bunch of commonly-used stuff so we don't have to manually #include them everywhere
//

// boost
#include <boost/shared_ptr.hpp>
#include <boost/utility.hpp>
#include <boost/format.hpp>
#include <boost/function.hpp>
#include <boost/bind.hpp>

// STL containers
#include <vector>
#include <map>
#include <string>
#include <set>
#include <list>
#include <deque>
#include <queue>
#include <bitset>

// STL algorithms & functions
#include <algorithm>
#include <functional>
#include <limits>

// C++ Stream stuff
#include <fstream>
#include <iostream>
#include <iomanip>
#include <sstream>

namespace QS
{	
	typedef std::string String;

	//declare a bunch of classes so people can declare pointers without including
	//a header file
	class InputSystem;
	class RenderSystem;
	class GuiSystem;
	class ScriptSystem;
	class HostSystem;
	class EventSystem;
	class GameSystem;
	class SystemFactory;
	class Engine;
	class Command;

	class EventArgs;
	class EventListener;
}


#include "QSException.h"
